import { getDictionary } from "@/api/system/dict.js";
export const enumApiPlugin = {
  install(Vue) {
    // 定义一个获取枚举数据的函数，并返回一个 Promise
    async function fetchEnum(codes, flag = true) {
      if (!Array.isArray(codes)) {
        codes = codes.split(",");
      }
      try {
        // 发起多个请求
        const promises = codes.map(async (code) => {
          const response = await getDictionary({ code });
          // 返回一个包含枚举代码和对应数据的对象
          // 此处根据项目自身的响应数据进行自定义处理，有的处理了一层.data,有的没处理，根据实际情况自行甄别
          if (response.data.data.length) {
            response.data.data.forEach((item) => {
              item.label = item.dictValue; // 将 dictValue 赋给 label
              item.value = flag
                ? isNaN(Number(item.dictKey))
                  ? item.dictKey
                  : Number(item.dictKey)
                : item.dictKey;
              // 将 dictKey 赋给 value
              // 删除原始的 dictValue 和 dictKey 属性
              delete item.dictValue;
              delete item.dictKey;
            });
          }
          return { [code]: response.data.data };
        });
        // 等待所有请求完成
        const results = await Promise.all(promises);
        // 将所有结果合并到一个对象中
        const enums = results.reduce(
          (acc, curr) => Object.assign(acc, curr),
          {}
        );
        // 返回结果对象
        return enums;
      } catch (error) {
        // 如果请求失败，抛出错误
        throw new Error(error);
      }
    }

    // 将 fetchEnum 函数添加到 Vue.prototype 中
    Vue.prototype.$fetchEnumData = fetchEnum;
  },
};
